home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NOVA - For the NeXT Workstation
/
NOVA - For the NeXT Workstation.iso
/
Newsletters
/
GEnieUnixNews
/
unxnl-09.92
< prev
next >
Wrap
Text File
|
1992-12-27
|
32KB
|
831 lines
_ _ _ _ _ _
// // //| // // \// N E W S
//_// // |// // /\\ Vol 3, Issue 7 - September 1992
R o u n d T a b l e (tm)
Items of interest to participants of the GEnie Unix RoundTable
The RoundTable SysOps are:
Andy Finkenstadt....ANDY Rick Mobley.........LRARK
Gary Smith..........GARS Brian Riley.........DELPHI
Mike Nolan..........MIKE.NOLAN All Unix SysOps.....UNIX$
We strongly encourage you to contact any or all of us if you have -ANY-
comments or suggestions. This is -YOUR- RoundTable. We are here to make
your participation as pleasant and beneficial as possible.
ED: editor notes - process n. continuing of an action (GARS) Gary Smith
==
Normally, we who dwell in Unixdom think of a process in much the same
way users of other languages think of functions or paradigms. I made clear
I am using Mr. Webster's more common definition in my subject, because I
have been noting for several issues that the GEnie Unix RoundTable has been
in a continuing evolutionary process. That process has been defined and
guided by our users.
Last issue, the addition of an Internet gateway on GEnie and resultant
help desk maintained primarily by lead SysOp Andy with able assistance from
Unix co-SysOp Mike Nolan, was the focus of this ongoing process.
[It must be noted that Andy extended himself in that effort far beyond any
reasonable call of duty.]
The focal point this time is in the GEnie Unix RoundTable Software
Library. File support for two system platforms: Sun and NeXT, one public
domain kernel: Linux, Internet information and SysAdmin support has grown
until it was deemed necessary to give each its own library. This will make
browsing for files covering each much easier.
The libraries for each are as follows:
29. Tools for System Administration
30. Linux - Unix workalike for the 386 PC
31. NeXT specific files and programs
32. Sun workstaion specific files
33. INTERNET files, information and programs
This reorganization was the result of user need. Thanks to each of you
for participating, giving us feedback, and for supporting the RoundTable.
You are defining the process, and we appreciate the opportunity to serve
as your hosts.
----------
WHO: NeXT Category Leader, Eric Tremblay
===
Hello Everyone, my name is Eric Tremblay most people here on GEnie call me
E.T. for short. One of the reasons I hang around in the Unix RT is because
of my great interest in the NeXT computer. As many of you know I have a
NeXTstation and I am currently developing software for the NeXT. Over the
past year there has been a lot of activity in the Unix RT for the NeXT
computer. The software library has grown by leaps and bounds and the
message area has also grown at a great pace. If you are interested about
the NeXT computer or would like to ask a question about it, I hope you will
drop by category 20. If you already have a NeXT I hope you will take a look
at the files found in the library. To find the file related to the NeXT just
to a search with the keyword NEXT. Hoping to see you there.
----------
Lead Sysop Notes (ANDY) Andrew Finkenstadt
================ Chief Sysop
August saw the advent of the Internet Beta Test and the Unix RT's
contribution to supporting GEnie's Internet Gateway product and
providing a base of information about the Internet itself. The
beta test proceeds. (Full information available on page 207, or
in the Unix RT Libraries - search for GENIE or INTERNET.)
In addition, Unix support is increasing. Coherent is now online,
providing support for their 286 product (Coherent 3.2) and
386/486 product (Coherent 4.0) which has a feature of being
compatible with character-mode applications from SCO Unix. Most
applications in source form compile "out of the box" and many
others port easily.
Now featured in the Unix RT libraries are several back issues of
the SunSpot Sun Information Resource files from Rice University
in Houston Texas. These files are informative and useful for
reading and learning about Sun and Unix.
This month will see special guest conferences with Internet
personalities and more expanded Unix coverage. Stay tuned for
more info on these things and more.
As always the Unix Sysops keep an "open mailbox" policy - drop us
a line at any of our addresses, or at the special 'group' address
UNIX$ and we will try to answer your question as best as
possible.
----------
Down and Dirty: Quick Scripts that do something useful
==============
Creating empty files (LRARK) Ricky Mobley
--------------------
If you'd like to use echo to create an empty file, you have to suppress
the newline: usually that means
echo "\c" > logfile # in Sys V or
echo -n > logfile # in BSD. but
: > logfile # is shorter to type and, so other posters say,
# works even in shells where
> logfile # doesn't.
sh -c '> target'
(LRARK) Ricky Mobley also snarfed the following handy mail script:
Question:
I need a shell script (csh or sh) to send me mail after completion.
Answer:
The popular answer was use mail:
mail -s "$0 done" ugolinia << EOS
Hey, $0 finished at `date`.
All these folks were on the system at the time:
`who`
EOS
----------
Appointment Calendar for your NeXTstation (E.TREMBLAY2) Eric "E.T." Tremblay
=========================================
Remember an Important Meeting with calendar.
Eric "E.T." Tremblay
May 23, 1992
Have your memory cells ever let you down? Did you ever miss an
important meeting or anniversary? I'm sure you answered yes to at least one
of the above questions. So what are you going to do about it? You can go on
as you did before or you can use your NeXT to help you get organized. What
you need is already in your machine the only thing holding you back from
using it is knowing that it's there. This little Unix utility is called
calendar and it's a part of every NeXT computer.
What does calendar do for you? It looks for a calendar text file in your
local directory, and if it finds the file it looks therein for today's date.
If it finds a line with the current date, it will send you electronic mail
containing the corresponding message.Found below is a simple example of the
calendar text file.
# Example of a calendar file located in a users local directory.
# This calendar file belongs to Joe Blow.
# This is a remark statement.
January 10 This is the message that will be sent in the e-mail.
May 23 This is another message that will be sent...
September 19 Happy birthday John!
You can make your text file as big as you want and include as many events
as you wish. The only rule you have to follow are that the date be in the
above format, you can use wild cards etc. Consult the Unix documentation
using the Digital Librarian with the keyword calendar for further details
about the format of the file.
Once your calendar file is ready, you most likely want your reminders to be
sent automatically. Well, that is not hard to do either. What you have to
do is modify a file called rc.local found in the /etc directory. What this
modification will do is that every time you power-up your NeXT, it will
execute this script which in turn will execute the calendar command. If
your NeXT computer is always on you need to execute the calendar command
using another method. Please consult Digital Librarian with the keyword
crontab. The difference is that when the NeXT is always on it would be more
appropriate to execute calendar command at a specific time on each day
using the crontab file.
Here's an example of what the file called rc.local found in the /etc
directory looks like. What you have to do is load the rc.local file in a
text editor and add the "calendar -" command to the script. Then save the
edited file and the next time you boot your NeXT you will receive and
electronic mail reminding you of a special event. (If you have an event for
that day of coarse.)
/etc/rc.local
#
# This script is for augmenting the standard startup commands. It is
# executed automatically by the system during boot up.
#
# In its released form, this script does nothing. you may customize
# it to your heart's content.
#
etc...
#
# Run you own commands here
#
(echo '.') >/dev/console
# calendar utility added here
calendar -
# It is very important to include the "-" sign after the calendar
# command
I hope that this article will help you take advantage of a very useful
command found in Unix library and make you more productive using your
NeXT computer
This article appeared in the magazine called InterFace Volume 4 No.7 August
1992 published by Le Club MacIntosh de Montreal 2250 rue Guy, suite 303
Montreal (Quebec) H3H 2N2.
----------
Upload Contest Winners for August (ANDY)
================================
Sub: andy sep 92
Upload contest winners
For the month of August the upload contest winners are
A.Rosenbalm & J.Wisniewsk2 - congratulations! Each of them won
ONE free day in the Unix RT. For details on how you can win free
time in the Unix RT, download the file CONTEST.RULES, file #2346.
----------
usr/local: Items (scripts and news) snarfed from various sources
=========
The first entry consists of methods of dealing with chmod in alternate
forms, found by (LRARK) Ricky Mobley in comp.unix.shell
Question:
I am looking for a sh routine to return a numerical value for a file/directory.
i.e. the files permissions are -rwxr-xr-x it would return a 755.
Answers:
-----------------------------------------------------------------------
From: hsc@sybase.com (Howard Cohen)
Newsgroups: comp.unix.shell
Subject: Re: Octal chmod status
Date: 14 Aug 92 00:30:18 GMT
#!/bin/sh
LSPERMS=`ls -l "$1" | sed -e "s:^\([^ ][^ ]*\).*:\1:"`
USR=`echo $LSPERMS X| sed -e "s:.\(...\).*:\1:"`
GRP=`echo $LSPERMS X| sed -e "s:....\(...\).*:\1:"`
OTH=`echo $LSPERMS X| sed -e "s:.......\(...\).*:\1:"`
PERMS=""
for elem in $USR $GRP $OTH
do
case "$elem" in
---) PERMS="${PERMS}0";;
--x) PERMS="${PERMS}1";;
-w-) PERMS="${PERMS}2";;
-wx) PERMS="${PERMS}3";;
r--) PERMS="${PERMS}4";;
r-x) PERMS="${PERMS}5";;
rw-) PERMS="${PERMS}6";;
rwx) PERMS="${PERMS}7";;
esac
done
echo $PERMS
-----------------------------------------------------------------------
From: mju@mudos.ann-arbor.mi.us (Marc Unangst)
Newsgroups: comp.unix.shell
Subject: Re: Octal chmod status
Date: 15 Aug 92 05:11:08 GMT
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
int
main(int argc, char **argv)
{
struct stat statbuf;
if(argc != 2) {
fprintf(stderr, "%s: usage: %s file\n", argv[0], argv[0]);
exit(1);
}
if(stat(argv[1], &statbuf) != 0) {
fprintf(stderr, "%s: can't stat file %s: %s\n", argv[0], argv[1],
strerror(errno));
exit(1);
}
printf("%o\n", statbuf.st_mode & 07777);
exit(0);
}
-----------------------------------------------------------------------
From: tchrist@convex.COM (Tom Christiansen)
Newsgroups: comp.unix.shell
Subject: Re: Octal chmod status
Date: 18 Aug 92 18:16:09 GMT
perl -e 'printf("%04o\n", (stat($ARGV[0]))[2] & 07777)'
-----------------------------------------------------------------------
From: tchrist@convex.COM (Tom Christiansen)
Newsgroups: comp.unix.shell
Subject: Re: Octal chmod status
Date: 19 Aug 92 14:30:59 GMT
[perl solution, optimized for readability ---Chip]
require 'stat.pl';
@sb = stat($ARGV[0]);
printf("%04o\n", $sb[$ST_MODE]);
-----------------------------------------------------------------------
From: rouben@math13.math.umbc.edu (Rouben Rostamian)
Newsgroups: comp.unix.shell
Subject: Re: Help with directories!
Date: 26 Aug 92 14:50:29 GMT
Create a file called convert.awk, containing:
{ for (i=2; i<=10; i++) {
n = 2*n
if ( substr($0,i,1) != "-" )
n++;
}
printf ("%o\n", n)
}
Then the apply the command:
echo -rwxr-xr-x | awk -f convert.awk
to get 755.
If you have nawk, you can write the script a bit more elegantly as:
{ for (i=2; i<=10; i++)
n = 2*n + ( substr($0,i,1) != "-" ? 1 : 0 )
printf ("%o\n", n)
}
----------
The following is a tar file organizer found by (GARS) Gary Smith in
alt.sources.
Article 2682 of alt.sources:
Path: glsrk!lrark!ddi1!uunet!uunet!decwrl!intertech-nh!utashiro
From: utashiro@InterTech.COM (Kazumasa Utashiro)
Newsgroups: comp.lang.perl,alt.sources
Subject: TARO: tar organizer (Re: Tar Perl and Compress)
Keywords: tar compress perl
Message-ID: <1992Jun16.223848.6262@InterTech.COM>
Date: 16 Jun 92 22:38:48 GMT
References: <1992Jun16.214035.490@cse.uta.edu>
Followup-To: comp.lang.perl
Organization: InterTech Data Systems, Inc., Cupertino, CA
Archive-name: taro
Submitted-by: utashiro@sra.co.jp
In article <1992Jun16.214035.490@cse.uta.edu>
turbo@cse.uta.edu (Chris Turbeville) writes:
> I'd like to be able to add files to tar.Z files without needing the disk
> space to hold the uncompressed tar.
This is not exactly what you want but probably very closed.
Using TARO, you can delete specified file from input tar
stream. What you need is adding a feature to concatinate
two tar streams. Workaround is dealing with terminator of
tar format which is two continuous null header block.
I made this program to retrieve some files in compressed tar
file in tar archive on tape (what a brain damaged format!).
--utashiro
#!/usr/local/bin/perl
;#
;# taro: tar organizer
;# Copyright (c) 1991,1992 srekcah@sra.co.jp
;# October 7 1991
;#
;# Maintained by utashiro@sra.co.jp
;; $rcsid = '$Id: taro,v 1.3 1992/04/13 18:30:37 utashiro Exp $';
;#
$usage = <<_;
Usage:
taro list tar-file # list
taro pick tar-file pattern [ pattern ... ] # pick up some files
taro throw tar-file pattern [ pattern ... ] # throw away some files
taro cat tar-file [ name ... ] # show file contents
taro edit tar-file perl-script # edit filename
taro s/foo/bar/ tar-file # short-cut for edit
_
;#
;# SEE ALSO
;# tar(1), tar(5)
;#
push(@INC, 'c:/etc/perl');
require('ctime.pl');
$header_size = 512;
$header_format = "a100 a8 a8 a8 a12 a12 a8 a a100 a*";
$nullblock = "\0" x $header_size;
%mode=(1, '--x', 2, '-r-', 3, '-wx', 4, 'r--', 5, 'r-x', 6, 'rw-', 7, 'rwx');
# initialize header index
$i = 0;
for (split(/ / ,'name mode uid gid size mtime chksum linkflag linkname pad'))
{
&eval(sprintf('$%s_i = %d;', $_, $i++));
}
# option handling
$opts = 'dtv';
while ($_ = $ARGV[0], /^-/ && shift) {
next unless ($car, $cdr) = /^-?(.)(.*)/;
if (index($opts, "$car:") >= $[) {
&eval("\$opt_$car = length(\$cdr) ? \$cdr : \@ARGV ? shift : &usage");
next;
}
if (index($opts, $car) >= $[) {
&eval("\$opt_$car++"); $_ = $cdr; redo;
}
&usage("Unknown option: $car\n\n");
}
$command = shift || &usage; # 1st argument is command
$tarfile = shift || '-'; # 2nd argument is archive file
command: {
if ($command eq 'list') {
last;
}
if ($command eq 'pick' || $command eq 'throw') {
@patterns = @ARGV;
for (@patterns) {
$_ = &wildcard($_);
}
($command, $negative) = ('pick', '!') if ($command eq 'throw');
$sub = "sub pickit { local(\$_) = \@_; $negative(/"
. join('/ || /', @patterns) . "/); }\n";
print STDERR $sub if $opt_d;
&eval($sub);
last;
}
if ($command eq 'cat' || $command eq 'extract') {
$catall++ if (@ARGV == 0);
for (@ARGV) {
$cat{$_}++;
$cat_cnt++;
}
last;
}
if ($command eq 'edit') {
$script = shift;
}
if ($command =~ m/^s/) {
$script = $command;
$command = 'edit';
}
if ($command eq 'edit') {
$sub_edit = "sub edit { local(\$_)=\@_; $script; \$_; }\n";
&eval($sub_edit);
print STDERR $sub_edit if $opt_d;
}
else {
print "Unknown command: $command\n";
&usage;
}
}
open(TAR, $tarfile) || die("$tarfile: $!\n");
open(TAR, '-|') || exec('zcat', $tarfile) || die("zcat: $!\n")
if ($tarfile =~ /\.Z$/);
while (($s = read(TAR, $header, $header_size)) == $header_size) {
$print_header = $print_body = 1;
if ($header eq $nullblock) {
print $header if ($command eq 'pick' || $command eq 'edit');
last if (++$null_count == 2);
next;
}
$null_count = 0;
@header = unpack($header_format, $header);
($name = $header[$name_i]) =~ s/\0*$//;
if ($command eq 'list') {
$print_header = $print_body = 0;
&show_header(@header);
}
elsif ($command eq 'pick') {
$print_header = $print_body = &pickit($name);
}
elsif ($command eq 'cat' || $command eq 'extract') {
$print_header = $print_body = 0;
$catit = $catall || $cat{$name};
$catit = 0 if ($header[$linkflag_i] =~ /[12]/);
}
elsif ($command eq 'edit') {
$header[$name_i] = &edit($header[$name_i]);
$header[$linkname_i] = &edit($header[$linkname_i])
if ($header[$linkflag_i] =~ /1/);
$header = &make_header(@header);
$print_header = $print_body = 0 if ($header[$name_i] =~ /^\0/);
}
print $header if $print_header;
if ($catit && $command eq 'extract') {
if ($name =~ m|/$|) {
chop($name);
mkdir($name, oct($header[$mode_i])) || warn("$name: $!\n");
next;
} else {
open(OUT, ">$name") || warn("$name: $!\n");
select(OUT);
}
}
$bufsize = 8192;
$size = oct($header[$size_i]);
$size = 0 if ($header[$linkflag_i] =~ /1/);
while ($size > 0) {
$bufsize = 512 if ($size < $bufsize);
if (($s = read(TAR, $buf, $bufsize)) != $bufsize) {
print "bufsize = $bufsize, size = $size, s = $s\n" if $opt_d;
die "Illegal EOF!\n";
}
print substr($buf, 0, $size) if $catit;
print $buf if $print_body;
$size -= $bufsize;
}
exit if ($catit && !--$cat_cnt);
if ($catit && $command eq 'extract') {
select(STDOUT);
close(OUT);
chmod oct($header[$mode_i]), $name;
}
}
close(TAR);
exit(0);
######################################################################
sub usage {
print $usage;
exit 1;
}
;#
;# make header block by recalculating checksum
;#
sub make_header {
local(@header, $header) = @_;
$header = pack($header_format, @header[0..5], ' ' x 8, @header[7..9]);
$header[6] = sprintf("% 6o\0 ", unpack("%16C*", $header));
pack($header_format, @header);
}
;#
;# parse header block
;#
sub parse_header {
local(@h) = @_;
$h[$name_i] =~ s/\0+$//;
$h[$linkname_i] =~ s/\0+$//;
for (2..6) {
$h[$_] =~ s/ \0//g;
$h[$_] = oct($h[$_]);
}
@h;
}
;#
;# show "tar tv" like information from header
;#
sub show_header {
($name, $mode, $uid, $gid, $size, $mtime, $chksum, $linkflag, $linkname)
= &parse_header(@_);
$ctime = &ctime($mtime);
chop($ctime);
# Sat Oct 5 10:46:00 PDT 1991
# 0--> 16---->
substr($ctime, 16, length($ctime) - 21) = '';
substr($ctime, 0, 4) = '';
$ctime =~ s/ (\d:\d\d)/0\1/; # keep compatibility with tar
printf("%s%3d/%d%7d %s ", &modeline($mode), $uid, $gid, $size, $ctime)
unless $opt_t; # terse
print $name;
if ($linkflag eq '1') { # hard link
print " linked to ", $linkname;
}
if ($linkflag eq '2') { # symbolic link
print " symbolic link to ", $linkname;
}
print " [chksum=$chksum]" if $opt_v;
print "\n";
}
;#
;# make modeline like 'rw-r--r--'
;#
sub modeline {
local($u, $g, $o) = $_[$[] =~ /(\d)(\d)(\d) \0$/;
$mode{$u} . $mode{$g} . $mode{$o};
}
;#
;# wildcard to regex convert
;#
sub wildcard {
local($_) = @_;
s#\\?.#$_ = $&; s/\\?([_0-9A-Za-z])/$1/ || /\\./ || s/[*]/.*/ ||
s/[|]/\$|^/ || tr/?{,}[]\-/.(|)[]\-/ || s/./\\$&/; $_;#ge;
length($_) ? "(^|\\/)$_\(\\0|\$|\\/)" : undef;
}
;#
;# eval with error handling
;#
sub eval {
local($exp) = @_;
eval $exp;
if ($@ ne '') {
local($package, $filename, $line) = caller;
warn "eval failed on line $line in file $filename\n";
warn "exp = \"$exp\"\n";
warn $@;
exit 1;
}
}
----------
Tutorials
=========
VI Unix Text Editor, Last Installment (GARS) Gary Smith
== ---------------- some closing thoughts
This will be the last installment in my series on VI, the Unix text
editor, created originally as a VIsual (full screen) display of EX,
both derived from ED. It is important that this linage be remembered,
because there are features of ED that are available from EX and VI.
Further, VI and EX are so completely related, it is quite impossible
to process a file with VI without using some feature of EX.
Other than again reminding everyone that VI is modal, and mnemonic,
with mnemonics in one mode having far different results than they
would in another mode,I will not be repeating lessons and tips given
in previous installments. It is suggested the user capture all the
installments and bundle them into one handy VI reference.
I like VI. It is extremely powerful, and one of those ubiquitous Unix
processes that comes with every platform. Learning VI is to your
advantage, should you ever want to edit text on any other system. You
will. It is my personal, unsubstantiated guess that as much as 90%
of a session can be spent in some editing task. After all, what are
you doing when you debug a source file except editing? Once you have
mastered VI there are some features that you will rue giving up when
moving to another editor. Touch typists especially will miss the fact
that 90% of the commands are in the form of one or two keystrokes and
on the home row! This feature alone makes ASCII text editing quicker in
VI than in any other editor, given equal proficiency. One other very
nice feature is that the keystroke to undo a previous command is often
intuitively matched to the key that produced the original command. Maybe
VI's single strongest saving grace is that, while it does not create a
backup file, it does maintain a log. This log can actually permit you to
recreate a file after such catastrophic events as a power failure during
an edit.
VI is one of those magical creatures that have layer upon layer of
hidden secrets. It was Bennett Falk in his "MicroTimes" (1) column who
first made me aware that you could literally spend an entire session
in VI, and accomplish any task you chose to execute, while never leaving
the editor. There is a valid reason for doing precisely that. It gives
you the ability to interactively debug a program. edit...compile...run...
edit...test...compile...execute, all from within VI. The primary tool for
performing this bit of magic is actually a EX command that is executed
from the command mode.
:!cmdx run command cmdx
The :! command provides you with a lot of flexibility totally lacking in
other editors. A simple example would be a directory listing :!ls.
The :! command is called a shell escape.
You can also shell escape from the cursor mode using ! to invoke the
command. Be careful, though. This is a bit tricky, since you are not
executing the command directly, but rather you feed a segment of the file
you are editing as input that replaces that part of the program's output.
This makes it extremely powerful as an interactive test tool, but also very
risky until you master the technique. It is suggested you play with this
concept, using a small script like 'today' available in the library and
back issues of this newsletter in two separate incarnations.
Now, we add a bit of real trickery. There are 26 buffers at your disposal
in VI. You can Yank text and Put it through those buffers. There is no rule
that says you can't place a command like "!fmt" into a buffer and then
executed by typing "@" and the buffer name.
What this does is permit you to use VI as true general file interface and
debugging platform.
Another risky tool that we touched on is recursive macros. Never ever set
up a macro like:
map! usr /usr/group
The sequence you use to create a macro must not contain the sequence
defined. The reason is the sequence in macro text will be expanded
geometrically, soon consuming all available resources. Should you invoke
such a macro try hitting BREAK, DELETE, Control D and Control C. One
of these will usually interrupt the sequence.
VI is extremely powerful. Learn to use it. It is the one editor that is
available on every platform, and performs precisely the same way on each
platform, provided curses has correctly defined your terminal. If you
prefer emacs or one of it's cousins like JOVE, that's fine. You won't
get an argument from me regarding your preference. Do get comfortable
with VI, and use it often enough to stay familiar with it. Like a good
carpenter, you need to take care of your tools. They in turn will take
care of you.
1. MicroTimes, California's Computer Magazine, 5951 Canning Street,
Oakland, CA 94609
Addendum: The following is a list of VI/EX related files available
in the GEnie Unix RoundTable library, compiled by fellow
SysOp (LRARK) Ricky Mobley
**EDitor note: This list contains ONLY those files ported
from the VI/EX archives. There are many others
NOT included in this list. gars
# Mostly files on vi.
#
# Index of archive: alf.uib.no (129.177.30.3)
# Filearea: /pub/lpf/misc
# Archive maintainer: Ove Ruben R Olsen (rubenro@viggo.blh.no)
# Archive updated: Thu Aug 22 18:06:23 GMT 1991
#
In the macros/ directory there exists macros for vi. Look at file
macros/INDEX.
UCB = University of California, Berkley. (Hometown of vi)
------------------
INDEX This file. *
WHOandWHERE A 'thank you' too all who have submitted to the
archive.
ex.changes.Z ex changes from version to version. UCB-dist.
ex.fix.Z An Encore ex fix.
ex.reference.Z ex Reference Manual. UCB-dist.
ex.summary.Z ex Command Summary. UCB-dist.
jl.ex.ref.Z Another reference for vi.
learn-vi.tar.Z LVI - The Learners Introduction to VI. Interactive.
nvi.tar.Z Novice VI.
shell-100.BetaA.Z Conversion table between different shells.
vi.1.Z Vi formatted manual.
vi.132.Z A tip on using vi on vt-100 with 132 columns.
vi.apwh.ms.Z Vi Command & Function Reference. UCB-dist.
vi.beiners.Z Vi beginners guide.
vi.card.tex.Z Vi reference card in TeX. Found inside
learn-vi.tar.Z
vi.chars.Z Appendix: character functions. UCB-dist.
vi.course.Z A course on using vi. Paper.
vi.course.tar.Z A course package on using vi. Paper.
vi.help.Z Vi reference card. Found inside learn-vi.tar.Z
vi.intro.Z Introduction on Display Editing with Vi. UCB-dist.
vi.intro.ps.Z Vi.intro in PostScript format. UCB-dist.
vi.macros.Z Macros, Abbreviations, and Buffers.
vi.macroDoc.tar.Z Two docs describing macros in vi.
Sample exrc file incl.
vi.man.tut.Z VI manual-page with a tutor.
vi.multfile.Z A doc on how to work with multiple files in vi.
vi.online-200.tar.Z Vi ON-LINE HELP with 'windows for vi'. Version 2.00
vi.passwd.Z A script for "secure" editing of /etc/passwd.
vi.passwd.fix.Z A fix to vi.passwd.fix.Z
vi.patch.Z Path to fix a "security" hole in VI.
vi.quick.Z Vi Quick reference card.
vi.ref.Z UNIX VI quick reference card.
vi.refchrt.Z Vi reference chart.
vi.reference.Z Vi reference. Version 7.
vi.reference.ms.Z Vi reference for typesetters.
vi.sigint.fix A src fix for vi dealing with 'sigint'.
vi.song.Z A song about vi.
vi.summary.Z Vi / ex Quick reference. UCB-dist.
vi.startup.d.Z NetNews discussion about ex:COMMAND / vi:COMMAND
feature.
vi.tabs.Z A tip on tabs in vi.
vi.tags.Z A paper on a tag-tech.
vi.tagStack.Z Patch for vaxen to make tag stack avail. Fixes for sun.
vi.tips.Z Beginners tips on vi.
vi.tutor.Z An interactive tutor for vi.
vi.ucb.tar.Z The whole UCB-dist package. package. *
vi-buffer.el.Z Invoke vi inside emacs. *
----------
---------------
REMINDER - This newsletter is being sent to you 'by request'. If you do
not wish to keep receiving it, e-mail a stop notice to GARS. On the other
hand, we would very much appreciate it if you would pass the word that we
do distribute this item near the tenth (10th) of the month of issue to any-
one on GEnie who requests it.
P L E A S E also remember contributions are most welcome. Please e-mail
items and/or suggestions to GARS.
(EOF)
Trademark and Copyright notices:
Unix is a Trademark of UNIX System Laboratories, Inc.; GEnie, LiveWire, and
RoundTable are Trademarks of General Electric Information Services Company;
Xenix and ms-dos are Trademarks of Microsoft Corporation; NeXT NeXTstation
and NeXTstep are Trademarks of NeXT Computer Systems, Inc., Coherent is a
Trademark of Mark Williams Company, Sun is a Trademark of Sun Microsystems,
Inc.
The contents of this newsletter are copyright(c) 1992 and may be copied whole
or in part only if original credit is included. The GEnie UNIX RoundTable is
not affiliated with AT&T or UNIX System Laboratories, Inc.